def split(n):
    """返回个位数字以外的部分和个位的数字"""
    return n//10,n%10

def sum_digits(n):
    """递归函数：返回各个位数相加之和"""
    if n<10:
        return n
    else:
        all_but_last,last=split(n)
        return sum_digits(all_but_last)+last
    
def luhn_sum(n):
    if n<10:
        return n
    else:
        all_but_last,last=split(n)
        return luhn_sum_double(all_but_last)+last
    
def luhn_sum_double(n):
    all_but_last,last=split(n)
    luhn_digit=sum_digits(2*last)
    if n<10:
        return luhn_digit
    else:
        return luhn_sum(all_but_last)+luhn_digit
    